﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace mapxp.algorithem
{
    class ALgo_test
    {
        public static List<My_Point> v1; 
        static void Main2(string[] args)
        {
            Map m = new Map("C://UofU_Orig.txt");

            //בדיקה לפונקציה שמחזירה גובה
            My_Point p = new My_Point(145, 210, 0);
            Console.WriteLine("the height in (" + p.x_value() + "," + p.y_value() + ") is " + Algo.calc_point_height(p, m));
            Console.WriteLine();

            //בדיקה לפונקציה שמחזירה את הנקודות שנמצאות על הרשת בין שני נקודות נתונות
            My_Point p1 = new My_Point(100, 21, 0);
            p1.set_z_value(Algo.calc_point_height(p1, m));
            My_Point p2 = new My_Point(150, 60, 0);
            p2.set_z_value(Algo.calc_point_height(p2, m));
            v1 = Algo.intersection(p1, p2, m);
            for (int i = 0; i < v1.Count(); i++)
            {
                Console.WriteLine(i + 1 + ". (" + v1[i].x_value() + "," + v1[i].y_value() + "," + v1[i].z_value() + ")");
            }
            Console.WriteLine();
            //gui test
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new mapxp.gui.CrossView()); 


            //בדיקה לפונקציה האם שתי נקודות רואות אחת את השניה עם ובלי גובה יחסי
            double height_p1 = 0;
            double height_p2 = 0;
            Boolean c1 = Algo.can_see(p1, height_p1, p2, height_p2, m);
            Console.WriteLine(c1 + ":: that the points (" + p1.x_value() + "," + p1.y_value() + "," + (p1.z_value() + height_p1) + ") and ( " + p2.x_value() + "," + p2.y_value() + "," + (p2.z_value() + height_p2) + ") can see eace other.");
            height_p1 = 17;
            height_p2 = 15;
            Boolean c2 = Algo.can_see(p1, height_p1, p2, height_p2, m);
            Console.WriteLine(c2 + ":: that the points (" + p1.x_value() + "," + p1.y_value() + "," + (p1.z_value() + height_p1) + ") and ( " + p2.x_value() + "," + p2.y_value() + "," + (p2.z_value() + height_p2) + ") can see eace other.");
            Console.WriteLine();

            //בדיקה לפונקציה שמחזירה את כל הנקודות שנראות מנקודה נתונה עם גובה יחסי ומרחק ראיה
            p.set_x_value(100);
            p.set_y_value(245);
            p.set_z_value(Algo.calc_point_height(p,m));
            double heigh_p = 10;
            double R = 3;
            List<My_Point> v2 = Algo.circule_seen_points(p, heigh_p, R, m);
            for (int i = 0; i < v2.Count(); i++)
            {
                Console.WriteLine(i + 1 + ". (" + v2[i].x_value() + "," + v2[i].y_value() + "," + v2[i].z_value() + ")");
            }
            Console.WriteLine();

            //בדיקה של מסלול בין שני נקודות נתונות עם גובה יחסי
            p1.set_x_value(0);
            p1.set_y_value(0);
            p1.set_z_value(Algo.calc_point_height(p1, m));
            p2.set_x_value(100);
            p2.set_y_value(215);
            p2.set_z_value(Algo.calc_point_height(p2, m));
            R = 3;
            List < My_Point > v3 = Algo.Find_Way(p1, 0, p2, 0, R, m);
            for (int i = 0; i < v3.Count(); i++)
            {
                Console.WriteLine(i + 1 + ". (" + v3[i].x_value() + "," + v3[i].y_value() + "," + v3[i].z_value() + ")");
            }
            Console.WriteLine();



            Console.WriteLine("Press any key to finish...");
            Console.ReadKey();
        }//end of Main
    }//end of Class Algo_test 
}//end of namespace mapxp
